package com.bbva.kyfb.firmas.controller;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import com.bbva.kyfb.firmas.beans.ErrorInfo;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.ComponentsForSignRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponent;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponents;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoDeletedFile;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoDeletedFiles;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileAuditRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileDetailedRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileToDelete;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFilesToDelete;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoToDeleteRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoToDeleteRequestMaking;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoUserReference;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoUserReferenceMaking;

public class FirmasConfeccionMockUtilities {
	
	/**
	 * Devuelve un InfoFileRequest a partir de los datos entregados
	 * @param sCanal
	 * @param sBancoInt
	 * @param sReferencia
	 * @param sCodOrigen
	 * @param sTipoFirma
	 * @param sPaginacionDesde
	 * @param sPaginacionNumElementos
	 * @param sTipoOrden
	 * @param sCodEstado
	 * @param sDivisa
	 * @param sTipoFecha
	 * @param sFechaDesde
	 * @param sFechaHasta
	 * @param sImporteDeste
	 * @param sImporteHasta
	 * @param sUsuarioOrdenante
	 * @return
	 */
	public InfoFileRequest obtenerInfoFileRequest(String sCanal,
			String sBancoInt, String sReferencia, String sCodOrigen,
			String sTipoFirma, int sPaginacionDesde,
			int sPaginacionNumElementos, String sTipoOrden, String sCodEstado,
			String sDivisa, String sTipoFecha, String sFechaDesde,
			String sFechaHasta, String sImporteDeste, String sImporteHasta,
			String sUsuarioOrdenante, ErrorInfo errorInfo) {
		// Inicialización de la devolucion
		InfoFileRequest devolucion = new InfoFileRequest();
		StringBuffer errorBuffer = new StringBuffer();
		boolean existenErrores = false;
		// Validaciones
		// 1. Obligatorios
		if(sCanal == null || "".equals(sCanal)){
			errorBuffer.append("No se ha informado el canal. ");
			existenErrores = true;
		}
		if(sBancoInt == null || "".equals(sBancoInt)){
			errorBuffer.append("No se ha informado el banco interno. ");
			existenErrores = true;
		}
		if(sReferencia == null || "".equals(sReferencia)){
			errorBuffer.append("No se ha informado la referencia. ");
			existenErrores = true;
		}
		if(sCodOrigen == null || "".equals(sCodOrigen)){
			errorBuffer.append("No se ha informado el código de origen. ");
			existenErrores = true;
		}
		if(sTipoFirma == null || "".equals(sTipoFirma)){
			errorBuffer.append("No se ha informado el tipo de firma. ");
			existenErrores = true;
		}
		if(sPaginacionDesde < 0){
			errorBuffer.append("El inicio de la paginación es menor de cero. ");
			existenErrores = true;
		}
		if(sPaginacionNumElementos < 0){
			errorBuffer.append("El número de elementos es menor de cero. ");
			existenErrores = true;
		}
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
			return devolucion;
		}else{
			devolucion = new InfoFileRequest();
			devolucion.setsCanal(sCanal);
			devolucion.setsBancoInt(sBancoInt);
			devolucion.setsReferencia(sReferencia);
			devolucion.setsCodOrigen(sCodOrigen);
			devolucion.setsTipoFirma(sTipoFirma);
			devolucion.setsPaginacionDesde(sPaginacionDesde);
			devolucion.setsPaginacionNumElementos(sPaginacionNumElementos);
		}
			
		// 2. Opcionales no vacíos
		if(sTipoOrden == null || "".equals(sTipoOrden)){}else{
			devolucion.setsTipoOrden(sTipoOrden);
		}
		if(sCodEstado == null || "".equals(sCodEstado)){}else{
			devolucion.setsCodEstado(sCodEstado);
		}
		if(sDivisa == null || "".equals(sDivisa)){}else{
			devolucion.setsDivisa(sDivisa);
		}
		if(sTipoFecha == null || "".equals(sTipoFecha)){}else{
			devolucion.setsTipoFecha(sTipoFecha);
		}
		if(sFechaDesde == null || "".equals(sFechaDesde)){}else{
			try{
				DateFormat parser = new SimpleDateFormat(FORMATO_FECHA);
				Date date = parser.parse(sFechaDesde.replaceAll("/", ""));
				devolucion.setsFechaDesde(date);
			}catch (ParseException pe){
				errorInfo.setErrorDescription("Verificar la fecha desde, problemas con el formato. ");
				existenErrores = true;
			}
		}
		if(sFechaHasta == null || "".equals(sFechaHasta)){}else{
			try{
				DateFormat parser = new SimpleDateFormat(FORMATO_FECHA);
				Date date = parser.parse(sFechaDesde.replaceAll("/", ""));
				devolucion.setsFechaHasta(date);
			}catch (ParseException pe){
				errorInfo.setErrorDescription("Verificar la fecha hasta, problemas con el formato. ");
				existenErrores = true;
			}
		}
		if(sImporteDeste == null || "".equals(sImporteDeste)){}else{
			try{
				devolucion.setsImporteDesde(Double.parseDouble(sImporteDeste));
			}catch (NumberFormatException nfe){
				errorBuffer.append("Verificar el importe desde, problemas con el formato. ");
				existenErrores = true;
			}
		}
		if(sImporteHasta == null || "".equals(sImporteHasta)){}else{
			try{
				devolucion.setsImporteHasta(Double.parseDouble(sImporteHasta));
			}catch (NumberFormatException nfe){
				errorBuffer.append("Verificar el importe hasta, problemas con el formato. ");
				existenErrores = true;
			}
		}
		if(sUsuarioOrdenante == null || "".equals(sUsuarioOrdenante)){}else{
			devolucion.setsUsuarioOrdenante(sUsuarioOrdenante);
		}
		
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
			return null;
		} 
		
		return devolucion;
	}
	
	/**
	 * Devuelve un InfoToDeleteRequestMaking a partir de los datos entregados
	 * @param sBancoInt 
	 * @param sCanal 
	 * @param sCodUsuario 
	 * @param sReferencia 
	 * @return
	 */
	public InfoToDeleteRequestMaking obtenerInfoToDeleteRequestMaking(String sCanal, 
			String sBancoInt, String sReferencia, String sCodUsuario, 
			String[][] listaEliminar, ErrorInfo errorInfo){
		InfoToDeleteRequestMaking devolucion = new InfoToDeleteRequestMaking();
		StringBuffer errorBuffer = new StringBuffer();
		boolean existenErrores = false;
		
		InfoUserReferenceMaking infoUserReferenceMaking = null;
		InfoDeletedFiles infoDeletedFiles = null;
		
		// Validaciones infoUserReferenceMaking
		if(sCanal == null || "".equals(sCanal)){
			errorBuffer.append("No se ha informado el canal. ");
			existenErrores = true;
		}
		if(sBancoInt == null || "".equals(sBancoInt)){
			errorBuffer.append("No se ha informado el banco interno. ");
			existenErrores = true;
		}
		if(sReferencia == null || "".equals(sReferencia)){
			errorBuffer.append("No se ha informado la referencia. ");
			existenErrores = true;
		}
		if(sCodUsuario == null || "".equals(sCodUsuario)){
			errorBuffer.append("No se ha informado el código de usuario. ");
			existenErrores = true;
		}
		// Creación infoUserReferenceMaking
		if(existenErrores){} else {
			infoUserReferenceMaking = new InfoUserReferenceMaking();
			infoUserReferenceMaking.setsCanal(sCanal);
			infoUserReferenceMaking.setsBancoInt(sBancoInt);
			infoUserReferenceMaking.setsReferencia(sReferencia);
			infoUserReferenceMaking.setsCodUsuario(sCodUsuario);
		}
		
		// Validaciones infoFilesToDelete
		ArrayList<InfoDeletedFile> lista = new ArrayList<InfoDeletedFile>();
		for(String[] file: listaEliminar){
			if(file[0] == null || "".equals(file[0])){
				errorBuffer.append("El identificador no se ha proporcionado. ");
				existenErrores = true;
			}
			if(file[1] == null || "".equals(file[1])){
				errorBuffer.append("El tipo de orden no se ha proporcionado. ");
				existenErrores = true;
			}
			
			InfoDeletedFile infoFile = new InfoDeletedFile();
			infoFile.setsIdOrdenFirmas(file[0]);
			infoFile.setsTipoOrden(file[1]); 
			lista.add(infoFile);
		}
				
		// Creación de la devolución
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
			return devolucion;
		}else{
			infoDeletedFiles = new InfoDeletedFiles();
			infoDeletedFiles.setInfoDeletedFiles(lista);
			devolucion = new InfoToDeleteRequestMaking();
			devolucion.setInfoUser(infoUserReferenceMaking);
			devolucion.setInfoDeletedFiles(infoDeletedFiles);
		}
		
		return devolucion;
	}
	/**
	 * Devuelve un InfoToDeleteRequestMaking a partir de los datos entregados
	 * @param sTipoFirma 
	 * @param sCodOrigen 
	 * @param sCanal 
	 * @param sBancoInt 
	 * @param sReferencia 
	 * @param sCodUsuario 
	 * @param sCodUsuarioFirma 
	 * @param sNIFUsuario 
	 * @param sPasswordUsuario 
	 * @param sPasswordFisico 
	 * @param sTokenFisico 
	 * @param sPoderFirma 
	 * @param sTipoValidacion 
	 * @return
	 */
	public InfoToDeleteRequest obtenerInfoToDeleteRequest(String sTipoFirma, String sCodOrigen, 
			String sCanal, String sBancoInt, String sReferencia, String sCodUsuario, 
			String sCodUsuarioFirma, String sNIFUsuario, String sPasswordUsuario, 
			String sPasswordFisico, String sTokenFisico, String sPoderFirma, String sTipoValidacion,
			String[][] listaEliminar, ErrorInfo errorInfo){
		InfoToDeleteRequest devolucion = new InfoToDeleteRequest();
		StringBuffer errorBuffer = new StringBuffer();
		boolean existenErrores = false;
				
		InfoUserReference infoUserReference = null;
		InfoFilesToDelete infoFilesToDelete = null;
		
		// Validaciones InfoUserReference
		if(sTipoFirma == null || "".equals(sTipoFirma)){
			errorBuffer.append("No se ha informado el tipo de firma. ");
			existenErrores = true;
		}
		if(sCodOrigen == null || "".equals(sCodOrigen)){
			errorBuffer.append("No se ha informado el código de origen. ");
			existenErrores = true;
		}
		if(sCanal == null || "".equals(sCanal)){
			errorBuffer.append("No se ha informado el canal. ");
			existenErrores = true;
		}
		if(sBancoInt == null || "".equals(sBancoInt)){
			errorBuffer.append("No se ha informado el banco interno. ");
			existenErrores = true;
		}
		if(sReferencia == null || "".equals(sReferencia)){
			errorBuffer.append("No se ha informado la referencia. ");
			existenErrores = true;
		}
		if(sCodUsuario == null || "".equals(sCodUsuario)){
			errorBuffer.append("No se ha informado el código de usuario. ");
			existenErrores = true;
		}
		if(sCodUsuarioFirma == null || "".equals(sCodUsuarioFirma)){
			errorBuffer.append("No se ha informado el código de usuario de firma. ");
			existenErrores = true;
		}
		if(sNIFUsuario == null || "".equals(sNIFUsuario)){
			errorBuffer.append("No se ha informado el código de usuario. ");
			existenErrores = true;
		}
		if(sPasswordUsuario == null || "".equals(sPasswordUsuario)){
			errorBuffer.append("No se ha informado el password del usuario. ");
			existenErrores = true;
		}
		if(sPasswordFisico == null || "".equals(sPasswordFisico)){
			errorBuffer.append("No se ha informado el password físico. ");
			existenErrores = true;
		}
		if(sTokenFisico == null || "".equals(sTokenFisico)){
			errorBuffer.append("No se ha informado el token físico. ");
			existenErrores = true;
		}
		if(sPoderFirma == null || "".equals(sPoderFirma)){
			errorBuffer.append("No se ha informado el poder de la firma. ");
			existenErrores = true;
		}
		if(sTipoValidacion == null || "".equals(sTipoValidacion)){
			errorBuffer.append("No se ha informado el tipo de validación. ");
			existenErrores = true;
		}
		
		if(existenErrores){} else {
			infoUserReference = new InfoUserReference();
			infoUserReference.setsTipoFirma(sTipoFirma);
			infoUserReference.setsCodOrigen(sCodOrigen);
			infoUserReference.setsCanal(sCanal);
			infoUserReference.setsBancoInt(sBancoInt);
			infoUserReference.setsReferencia(sReferencia);
			infoUserReference.setsCodUsuario(sCodUsuario);
			infoUserReference.setsCodUsuarioFirma(sCodUsuarioFirma);
			infoUserReference.setsNIFUsuario(sNIFUsuario);
			infoUserReference.setsPasswordUsuario(sPasswordUsuario);
			infoUserReference.setsPasswordFisico(sPasswordFisico);
			infoUserReference.setsTokenFisico(sTokenFisico);
			infoUserReference.setsPoderFirma(sPoderFirma);
			infoUserReference.setsTipoValidacion(sTipoValidacion);
		}
		
		// Validaciones infoFilesToDelete
		ArrayList<InfoFileToDelete> lista = new ArrayList<InfoFileToDelete>();
		for(String[] file: listaEliminar){
			if(file[0] == null || "".equals(file[0])){
				errorBuffer.append("El identificador no se ha proporcionado. ");
				existenErrores = true;
			}
			if(file[1] == null || "".equals(file[1])){
				errorBuffer.append("El tipo de orden no se ha proporcionado. ");
				existenErrores = true;
			}
			
			InfoFileToDelete infoFile = new InfoFileToDelete();
			infoFile.setsIdOrden(file[0]);
			infoFile.setsTipoOrden(file[1]);
			lista.add(infoFile);
		}
		
		// Creación de la devolución
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
			return devolucion;
		}else{
			infoFilesToDelete = new InfoFilesToDelete();
			infoFilesToDelete.setInfoFilesToDelete(lista);
			devolucion = new InfoToDeleteRequest();
			devolucion.setInfoFilesToDelete(infoFilesToDelete);
			devolucion.setInfoUserReference(infoUserReference);
		}
		return devolucion;
	}
	/**
	 * Obtiene un InfoFileAuditRequest a partir de los datos entregados
	 * @param sIdOrdenFirmas
	 * @param sCanal
	 * @param sBancoInt
	 * @param sReferencia
	 * @param sTipoOrden
	 * @param errorInfo
	 * @return
	 */
	public InfoFileAuditRequest obtenerInfoFileAuditRequest(String sIdOrdenFirmas, String sCanal, 
			String sBancoInt, String sReferencia, String sTipoOrden, ErrorInfo errorInfo){
		InfoFileAuditRequest devolucion = new InfoFileAuditRequest();
		StringBuffer errorBuffer = new StringBuffer();
		boolean existenErrores = false;
		
		// Validaciones 
		if(sIdOrdenFirmas == null || "".equals(sIdOrdenFirmas)){
			errorBuffer.append("No se ha informado el identificador del fichero a consultar. ");
			existenErrores = true;
		}
		if(sCanal == null || "".equals(sCanal)){
			errorBuffer.append("No se ha informado el canal. ");
			existenErrores = true;
		}
		if(sBancoInt == null || "".equals(sBancoInt)){
			errorBuffer.append("No se ha informado el banco interno. ");
			existenErrores = true;
		}
		if(sReferencia == null || "".equals(sReferencia)){
			errorBuffer.append("No se ha informado la referencia. ");
			existenErrores = true;
		}
		if(sTipoOrden == null || "".equals(sTipoOrden)){
			errorBuffer.append("No se ha informado el tipo de orden. ");
			existenErrores = true;
		}
		
		// Creación de la devolución
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
		} else{
			devolucion = new InfoFileAuditRequest();
			devolucion.setsIdOrdenFirmas(sIdOrdenFirmas);
			devolucion.setsCanal(sCanal);
			devolucion.setsBancoInt(sBancoInt);
			devolucion.setsReferencia(sReferencia);
			devolucion.setsTipoOrden(sTipoOrden);
		}
		
		return devolucion;
	}
	/**
	 * Devuelve un InfoToDeleteRequestMaking a partir de los datos entregados
	 * @param sTipoFirma 
	 * @param sCodOrigen 
	 * @param sCanal 
	 * @param sBancoInt 
	 * @param sReferencia 
	 * @param sCodUsuario 
	 * @param sCodUsuarioFirma 
	 * @param sNIFUsuario 
	 * @param sPasswordUsuario 
	 * @param sPasswordFisico 
	 * @param sTokenFisico 
	 * @param sPoderFirma 
	 * @param sTipoValidacion 
	 * @return
	 */
	public ComponentsForSignRequest obtenerComponentsForSignRequest(
			String sTipoFirma, String sCodOrigen, String sCanal, 
			String sBancoInt, String sReferencia, String sCodUsuario, 
			String sCodUsuarioFirma, String sNIFUsuario, 
			String sPasswordUsuario, String sPasswordFisico, 
			String sTokenFisico, String sPoderFirma, String sTipoValidacion,
			String[][] listaFirmar, ErrorInfo errorInfo){
		ComponentsForSignRequest devolucion = new ComponentsForSignRequest();
		StringBuffer errorBuffer = new StringBuffer();
		boolean existenErrores = false;
				
		InfoUserReference infoUserReference = null;
		InfoComponents infoComponents = null;
		
		// Validaciones InfoUserReference
		if(sTipoFirma == null || "".equals(sTipoFirma)){
			errorBuffer.append("No se ha informado el tipo de firma. ");
			existenErrores = true;
		}
		if(sCodOrigen == null || "".equals(sCodOrigen)){
			errorBuffer.append("No se ha informado el código de origen. ");
			existenErrores = true;
		}
		if(sCanal == null || "".equals(sCanal)){
			errorBuffer.append("No se ha informado el canal. ");
			existenErrores = true;
		}
		if(sBancoInt == null || "".equals(sBancoInt)){
			errorBuffer.append("No se ha informado el banco interno. ");
			existenErrores = true;
		}
		if(sReferencia == null || "".equals(sReferencia)){
			errorBuffer.append("No se ha informado la referencia. ");
			existenErrores = true;
		}
		if(sCodUsuario == null || "".equals(sCodUsuario)){
			errorBuffer.append("No se ha informado el código de usuario. ");
			existenErrores = true;
		}
		if(sCodUsuarioFirma == null || "".equals(sCodUsuarioFirma)){
			errorBuffer.append("No se ha informado el código de usuario de firma. ");
			existenErrores = true;
		}
		if(sNIFUsuario == null || "".equals(sNIFUsuario)){
			errorBuffer.append("No se ha informado el código de usuario. ");
			existenErrores = true;
		}
		if(sPasswordUsuario == null || "".equals(sPasswordUsuario)){
			errorBuffer.append("No se ha informado el password del usuario. ");
			existenErrores = true;
		}
		if(sPasswordFisico == null || "".equals(sPasswordFisico)){
			errorBuffer.append("No se ha informado el password físico. ");
			existenErrores = true;
		}
		if(sTokenFisico == null || "".equals(sTokenFisico)){
			errorBuffer.append("No se ha informado el token físico. ");
			existenErrores = true;
		}
		if(sPoderFirma == null || "".equals(sPoderFirma)){
			errorBuffer.append("No se ha informado el poder de la firma. ");
			existenErrores = true;
		}
		if(sTipoValidacion == null || "".equals(sTipoValidacion)){
			errorBuffer.append("No se ha informado el tipo de validación. ");
			existenErrores = true;
		}
		
		if(existenErrores){} else {
			infoUserReference = new InfoUserReference();
			infoUserReference.setsTipoFirma(sTipoFirma);
			infoUserReference.setsCodOrigen(sCodOrigen);
			infoUserReference.setsCanal(sCanal);
			infoUserReference.setsBancoInt(sBancoInt);
			infoUserReference.setsReferencia(sReferencia);
			infoUserReference.setsCodUsuario(sCodUsuario);
			infoUserReference.setsCodUsuarioFirma(sCodUsuarioFirma);
			infoUserReference.setsNIFUsuario(sNIFUsuario);
			infoUserReference.setsPasswordUsuario(sPasswordUsuario);
			infoUserReference.setsPasswordFisico(sPasswordFisico);
			infoUserReference.setsTokenFisico(sTokenFisico);
			infoUserReference.setsPoderFirma(sPoderFirma);
			infoUserReference.setsTipoValidacion(sTipoValidacion);
		}
		
		// Validaciones infoFilesToDelete
		ArrayList<InfoComponent> lista = new ArrayList<InfoComponent>();
		for(String[] file: listaFirmar){
			if(file[0] == null || "".equals(file[0])){
				errorBuffer.append("El identificador no se ha proporcionado. ");
				existenErrores = true;
			}
			// TODO: Se ha cambiado el tipo por descripción
			if(file[1] == null || "".equals(file[1])){
				errorBuffer.append("El tipo de orden no se ha proporcionado. ");
				existenErrores = true;
			}
			InfoComponent infoComponent = new InfoComponent();
			infoComponent.setsCodTipoOrden(file[0]);
			infoComponent.setsDesOrden(file[1]); 
			lista.add(infoComponent);
		}
		
		// Creación de la devolución
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
			return devolucion;
		}else{
			infoComponents = new InfoComponents();
			infoComponents.setInfoComponents(lista);
			devolucion = new ComponentsForSignRequest();
			devolucion.setInfoUserReference(infoUserReference);
			devolucion.setInfoComponents(infoComponents);
		}
		
		return devolucion;
	}
	/**
	 * Devuelve un InfoFileDetailedRequest a partir de los datos entregados
	 * @param sCanal
	 * @param sBancoInt
	 * @param sReferencia
	 * @param sCodOrigen
	 * @param sCodUsuario
	 * @param sNIFUsuario
	 * @param sCodBancoProd
	 * @param sCodProducto
	 * @param sCodSubproducto
	 * @param sTipoFirma
	 * @param errorInfo
	 * @return
	 */
	public InfoFileDetailedRequest obtenerInfoFileDetailedRequest(
			String sCanal, String sBancoInt, String sReferencia,
			String sCodOrigen, String sCodUsuario, String sNIFUsuario,
			String sCodBancoProd, String sCodProducto, String sCodSubproducto,
			String sTipoFirma, ErrorInfo errorInfo) {
		
		InfoFileDetailedRequest devolucion = new InfoFileDetailedRequest();
		StringBuffer errorBuffer = new StringBuffer();
		boolean existenErrores = false;
		
		// Verificar obligatorios
		if(sCanal == null || "".equals(sCanal)){
			errorBuffer.append("No se ha informado el canal. ");
			existenErrores = true;
		}
		if(sBancoInt == null || "".equals(sBancoInt)){
			errorBuffer.append("No se ha informado el banco interno. ");
			existenErrores = true;
		}
		if(sReferencia == null || "".equals(sReferencia)){
			errorBuffer.append("No se ha informado la referencia. ");
			existenErrores = true;
		}
		if(sCodOrigen == null || "".equals(sCodOrigen)){
			errorBuffer.append("No se ha informado el código de origen. ");
			existenErrores = true;
		}
		if(sCodUsuario == null || "".equals(sCodUsuario)){
			errorBuffer.append("No se ha informado el código de usuario. ");
			existenErrores = true;
		}
		if(sNIFUsuario == null || "".equals(sNIFUsuario)){
			errorBuffer.append("No se ha informado el código de usuario. ");
			existenErrores = true;
		}
		if(sCodBancoProd == null || "".equals(sCodBancoProd)){
			errorBuffer.append("No se ha informado el banco producto. ");
			existenErrores = true;
		}
		if(sCodProducto == null || "".equals(sCodProducto)){
			errorBuffer.append("No se ha informado el código de producto. ");
			existenErrores = true;
		}
		if(sCodSubproducto == null || "".equals(sCodSubproducto)){
			errorBuffer.append("No se ha informado el subcódigo de producto. ");
			existenErrores = true;
		}
		
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
			return devolucion;
		}else{
			devolucion = new InfoFileDetailedRequest();
			devolucion.setsCanal(sCanal);
			devolucion.setsBancoInt(sBancoInt);
			devolucion.setsReferencia(sReferencia);
			devolucion.setsCodOrigen(sCodOrigen);
			devolucion.setsCodUsuario(sCodUsuario);
			devolucion.setsNIFUsuario(sNIFUsuario);
			devolucion.setsCodBancoProd(sCodBancoProd);
			devolucion.setsCodProducto(sCodProducto);
			devolucion.setsCodSubproducto(sCodSubproducto);
			devolucion.setsTipoFirma(sTipoFirma);
		}
		
		// Verificar opcionales
		if(sTipoFirma == null || "".equals(sTipoFirma)){
			errorBuffer.append("No se ha informado el dato opcional tipo de firma ");
			errorInfo.setErrorDescription(errorBuffer.toString());
		}else{
			devolucion.setsTipoFirma(sTipoFirma);
		}
		
		return devolucion;
	}
	/**
	 * Devuelve un InfoComponentRequest a partir de los datos entregados
	 * @param sIdOrdenFirmas
	 * @param sCodTipoOrden
	 * @param sCodOrigen
	 * @param sMostarOrdenes
	 * @param sIdioma
	 * @return
	 */
	public InfoComponentRequest obtenerInfoComponentRequest(String sIdOrdenFirmas, 
			String sCodTipoOrden, String sCodOrigen, String sMostrarOrdenes, 
			String sIdioma, ErrorInfo errorInfo){
		InfoComponentRequest devolucion = new InfoComponentRequest();
		StringBuffer errorBuffer = new StringBuffer();
		boolean existenErrores = false;
		
		// Verificar obligatorios
		if(sIdOrdenFirmas == null || "".equals(sIdOrdenFirmas)){
			errorBuffer.append("No se ha informado el identificador del fichero. ");
			existenErrores = true;
		}
		if(sCodTipoOrden == null || "".equals(sCodTipoOrden)){
			errorBuffer.append("No se ha informado el tipo de fichero. ");
			existenErrores = true;
		}
		if(sCodOrigen == null || "".equals(sCodOrigen)){
			errorBuffer.append("No se ha informado el código de origen de la aplicación. ");
			existenErrores = true;
		}
		if(sMostrarOrdenes == null || "".equals(sMostrarOrdenes)){
			errorBuffer.append("No se ha informado el identificador del fichero. ");
			existenErrores = true;
		}
		if(sMostrarOrdenes == null || "".equals(sMostrarOrdenes)){
			errorBuffer.append("No se ha informado el código del idioma. ");
			existenErrores = true;
		}
		
		if(existenErrores){
			errorInfo.setErrorDescription(errorBuffer.toString());
			return devolucion;
		}else{
			devolucion = new InfoComponentRequest();
			devolucion.setsIdOrdenFirmas(sIdOrdenFirmas);
			devolucion.setsCodTipoOrden(sCodTipoOrden);
			devolucion.setsCodOrigen(sCodOrigen);
			devolucion.setsMostrarOrdenes(sMostrarOrdenes);
			devolucion.setsIdioma(sIdioma);
		}
		
		return devolucion;
	}
	
	// Constantes
	
	/**
	 * Posibles valores de la variable sTipoFirma
	 * FS: Firmas Servidor
	 */
	public static final String TIPO_FIRMA_FS = "FS";
	/**
	 * Posible valor de la variable sTipoFirma
	 * FH: Firmas Host
	 */
	public static final String TIPO_FIRMA_FH = "FH";
	/**
	 * Posible valor de la variable sCodEstado
	 * TO: Todos 
	 */
	public static final String COD_ESTADO_TO = "TO";
	/**
	 * Posible valor de la variable sCodEstado
	 * PF: Pendiente firma
	 */
	public static final String COD_ESTADO_PF = "PF";
	/**
	 * Posible valor de la variable sCodEstado
	 * FP: Firmado parcialmente
	 */
	public static final String COD_ESTADO_FP = "FP";
	/**
	 * Posible valor de la variable sCodEstado
	 * PA: Pendiente auditar
	 */
	public static final String COD_ESTADO_PA = "PA";
	/**
	 * Posible valor de la variable sTipoFecha
	 * TO: Todos
	 */
	public static final String TIPO_FECHA_TO = "TO";
	/**
	 * Posible valor de la variable sTipoFecha
	 * FC: Fecha creación
	 */
	public static final String TIPO_FECHA_FC = "FC";
	/**
	 * Posible valor de la variable sTipoFecha
	 * FP: Fecha proceso
	 */
	public static final String TIPO_FECHA_FP = "FP";
	/**
	 * Formato de presentación de la fecha
	 */
	public static final String FORMATO_FECHA = "yyyyMMdd";

}
